package cn.nhs.schedule.common;

import cn.nhs.schedule.domain.ExecOrder;
import cn.nhs.schedule.task.ScheduledTask;
import org.apache.curator.framework.CuratorFramework;

import org.springframework.context.ApplicationContext;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 定义了一个名为 Constants 的类，其中包含了一些常量和静态变量，以及一个内部静态类和一个内部静态接口。
 */
public class Constants {

    // 一个线程安全的 ConcurrentHashMap 对象，用于存储任务组的执行顺序，使用 beanName 作为键，对应的 ExecOrder 列表作为值。
    public static final Map<String, List<ExecOrder>> execOrderMap = new ConcurrentHashMap<>();

    // 一个线程安全的 ConcurrentHashMap 对象，用于存储调度任务，使用任务名称作为键，对应的 ScheduledTask 对象作为值。
    public static final Map<String, ScheduledTask> scheduledTasks = new ConcurrentHashMap<>(16);


    public static class Global {
        public static ApplicationContext applicationContext;    // 用于存储应用程序上下文
        public static final String LINE = "/";                  // public static final String LINE = "/";
        public static String CHARSET_NAME = "utf-8";            // 一个表示字符编码名称的字符串常量，默认为 "utf-8"。
        public static int schedulePoolSize = 8;                 // 定时任务执行线程池核心线程数
        public static String ip;                                // 本机IP
        public static String zkAddress;                         // zookeeper服务地址；x.x.x.x:2181
        public static String schedulerServerId;                 // 任务服务ID；  工程名称En
        public static String schedulerServerName;               // 任务服务名称；工程名称Ch
        public static CuratorFramework client;                  // zk配置；client
        public static String path_root = "/cn/nhs/schedule";   //zk配置；根目录
        public static String path_root_exec = path_root + "/exec";  // 一个表示执行路径的字符串常量，是 path_root 的子路径。
        public static String path_root_server;                  // 一个表示服务器路径的字符串变量。
        public static String path_root_server_ip;               // 一个表示服务器 IP 路径的字符串变量.
        public static String path_root_server_ip_clazz;              //[结构标记]类名称
        public static String path_root_server_ip_clazz_method;       //[结构标记]临时节点
        public static String path_root_server_ip_clazz_method_status;//[结构标记]永久节点
    }

    public static class InstructStatus{
        public final static Integer stop = 0;     //停止
        public final static Integer Start = 1;    //启动
        public final static Integer Refresh = 2;  //刷新
    }

}
